package co.edu.uniandes.sd.interfaz;

import java.awt.GridBagLayout;
import javax.swing.JPanel;
import java.awt.Dimension;
import javax.swing.JLabel;
import java.awt.Rectangle;
import javax.swing.JTextField;
import javax.swing.JButton;

import java.awt.Color;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.BorderLayout;
import javax.swing.JDesktopPane;
import javax.swing.JScrollPane;
import javax.swing.JList;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JTextArea;
import javax.swing.BorderFactory;
import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelListener;

import java.awt.Font;
import javax.swing.JTable;
import java.awt.Insets;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.TimerTask;

import javax.swing.table.DefaultTableModel;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;

import co.edu.uniandes.sd.mundo.Archivo;

public class PanelVerArchivos extends JPanel implements ActionListener, ListSelectionListener
{

    public static final String VER = "Ver";
    
    public final static String MODIFICAR = "Modificar";
    
    public final static String FINALIZAR = "Finalizar";

    private static final long serialVersionUID = 1L;
    private JTable table;
    private JButton btnDesplegar;
    private FileTreePanel panelArbol;
    private JButton btnModificar;
    private JButton btnFinalizar;
    private JTextField txtModificar;
    private InterfazCliente principal;

    /**
     * This is the default constructor
     */
    public PanelVerArchivos( InterfazCliente ventana )
    {
        super( );
        principal = ventana;
        initialize( );
        setEnabled(false);
    }

    public void setEnabled( boolean param )
    {
        Component[] coleccion = getComponents( );
        for( int i = 0; i < coleccion.length; i++ )
        {
            Component temp = coleccion[ i ];
            temp.setEnabled( param );
            if(temp.getClass().equals(JTextField.class))
            {
            	((JTextField)temp).setEditable(param);
            }
        }
    }
    
    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize( )
    {
        this.setSize( 445, 137 );
        setLayout(new BorderLayout(0, 0));
        
        
        
        table = new JTable();
        table.setModel(new TableModel(null,
	        	new String[] {
	        		"Nombre", "Tipo Archivo", "Fecha", "Origen"
	        	}));
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.setFillsViewportHeight(true);     
        
        JScrollPane scrollPane = new JScrollPane(table);
        scrollPane.setViewportBorder(null);
        add(scrollPane, BorderLayout.CENTER);
        
        JPanel panelSur = new JPanel();
        panelSur.setLayout(new BorderLayout());
        JPanel panelTmp = new JPanel();
        panelTmp.setLayout(new GridLayout(1,2));
        btnModificar = new JButton("Modificar archivo");
        btnModificar.setActionCommand(MODIFICAR);
        btnModificar.addActionListener(this);
        panelTmp.add(btnModificar);
        txtModificar = new JTextField();
        panelTmp.add(txtModificar);
        panelSur.add(panelTmp,BorderLayout.CENTER);
        btnDesplegar = new JButton("Desplegar");
        btnDesplegar.setActionCommand(VER);
        btnDesplegar.addActionListener(this);
        panelSur.add(btnDesplegar,BorderLayout.SOUTH);
        add(panelSur, BorderLayout.SOUTH);
        
        add(getPanelArbol(), BorderLayout.WEST);
    }

    private FileTreePanel getPanelArbol() {
		if (panelArbol == null) {
			panelArbol = new FileTreePanel(principal, false, 1);
		}
		return panelArbol;
	}

    public void actionPerformed( ActionEvent e )
    {
        String evento = e.getActionCommand( );
        if( evento.equalsIgnoreCase( VER ) )
        {        
        	File archivo = ((File)table.getValueAt((table.getSelectedRow()), 4));
        	File fileTmp = archivo;
        	principal.iniciarVisualizacionArhchivo(fileTmp);
        	try {
				Runtime.getRuntime().exec("RUNDLL32.EXE SHELL32.DLL,ShellExec_RunDLL "+fileTmp.getAbsolutePath());
				Thread.sleep(6000);
				principal.finalizarVisualizacion(fileTmp);
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (InterruptedException e2) {
				// TODO Auto-generated catch block
				e2.printStackTrace();
			}
        }else if( evento.equalsIgnoreCase( MODIFICAR ) )
        {
        	principal.modificarArchivo(txtModificar.getText());
        }else if( evento.equalsIgnoreCase( FINALIZAR ) )
        {
        	principal.finalizarModificacion();
        } 
    }

	@Override
	public void valueChanged(ListSelectionEvent e) 
	{
		if(e.getSource().equals(table.getSelectionModel()))
        {
            int row = table.getSelectedRow();
            if(table.getModel().getRowCount()>0&&row>=0)
            {
               
            }
        }
	}

	public void actualizarListaArchivos(ArrayList<Archivo> arg) 
	{
		Object[][] data = new Object [arg.size()][4];
		for(int i=0; i<arg.size(); i++)
		{
			data[i] = new Object[]{arg.get(i).getIdentificador(),arg.get(i).darExtension(), arg.get(i).getTiempo(), arg.get(i).getTipoArchivo().toString(), arg.get(i).getArchivo()};
		}
		((DefaultTableModel) table.getModel()).setDataVector(data, new String[] {
        		"Identificador", "Extension", "Fecha", "Origen", "Ruta"
    	});
	}
	
	public void refresh()
	{
		panelArbol.refresh();
		// TODO Auto-generated method stub
		
	}
	
} // @jve:decl-index=0:visual-constraint="10,10"
